import 'package:shared_preferences/shared_preferences.dart';

class TokenManager {
  String? _token;
  final _key = 'enjoy-token-key';

// 静态的实例对象，为初始化则为null。Dart中没有undefined的概念
// 如果已在外部被实例化，则不为null
  static TokenManager? _instance;

  // 自定义构造函数。返回一个新对象
  TokenManager._internal();

  //用于维护一个单实例对象
  // 默认构造函数，创建新对象时执行。返回一个新对象
  factory TokenManager() {
    _instance ??= TokenManager._internal();
    return _instance!;
  }

  // 以下为token维护的方法
  // 初始化，将本地存储的token赋值给当前token
  Future init() async {
    // 获取实例对象
    final prefs = await SharedPreferences.getInstance();
    // 调用实例方法，获取本地存储的token
    _token = prefs.getString(_key);
  }

  // 获取token值
  String? getToken() {
    return _token;
  }

  // 设置token到本地
  Future setToken(String token) async {
    // 将传来的token赋值到本地token
    // 使得其他地方获取token时, 能够同步
    _token = token;
    // 获取实例对象
    final prefs = await SharedPreferences.getInstance();
    // 调用实例方法，存储token到本地
    await prefs.setString(_key, token);
  }

  //删除当前和本地token
  Future removeToken() async {
    // 将当前token置空
    _token = null;

    // 获取实例对象
    final prefs = await SharedPreferences.getInstance();
    // 调用实例方法，删除本地token
    await prefs.remove(_key);
  }
}
